package meituan;

import java.util.Scanner;

public class Main1 {
    /**
     * 小美在玩一项游戏。该游戏的目标是尽可能抓获敌人。
     * 敌人的位置将被一个二维坐标 (x, y) 所描述。
     * 小美有一个全屏技能，该技能能一次性将若干敌人一次性捕获。
     * 捕获的敌人之间的横坐标的最大差值不能大于A，纵坐标的最大差值不能大于B。
     * 现在给出所有敌人的坐标，你的任务是计算小美一次性最多能使用技能捕获多少敌人。
     * 动态规划优化
     */
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();
        int m = in.nextInt();
        int n = in.nextInt();
        int res = 0;
        // 0 无敌人，1 有敌人
        int[][] arr = new int[1001][1001];
        for(int i=0;i<N;i++){
            int a = in.nextInt();
            int b = in.nextInt();
            arr[a][b] = 1;
        }

        // 窗口遍历
        for(int i=1;i<1001;i++){
            for(int j=1;j<1001;j++){
                // 窗口的左上角 i,j
                // 右下角 i+m,j+n
                //遍历检查有几个敌人，如果超过最大值就替换
                int check = check(arr, i, j, i + m, j + n);
                res = check>res? check:res;
            }
        }
        System.out.println(res);
    }

    private static int check(int[][] arr, int i, int j, int i1, int j1) {
        int res = 0;
        if(i1>1000||j1>1000) return res;

        for(int a=i;a<=i1;a++){
            for(int b = j;b<=j1;b++){
                if(arr[a][b] == 1) res++;
            }
        }
        return res;
    }
}
